/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Infoclient;

import Protocol.ReturnObject;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 *
 * @author Roman
 */
public class Piechart extends JPanel {
    private ArrayList<Integer> amountList;
    private ArrayList<String> legendList;
    private ArrayList<Color> colorList;
    private int columnCounter = 0;
    private int rowCounter = 0;
    private int totalAmount = 0;
    
    private int drawnColumns = 0;
    private int textLocation = 15;
    
    private boolean infoVerwerkt = false;
    
    public Piechart(){
        //Maakt ArrayLists aan.
        amountList = new ArrayList();
        legendList = new ArrayList();
        colorList = new ArrayList();
        //Verwerkt de query.
        //verwerkReturnObject(ro);
        //JScrollPane scrollbar = new JScrollPane(this);
        //this.add(scrollbar);
    }
    
    public void paintComponent(Graphics g){
        //Tekent het taartdiagram als de query is aangemaakt.
        drawPiechart(g);
    }
    
    public boolean isInt(String string){
        try {
            //indien geen foutmelding: het is een integer.
            Integer.parseInt(string);
            return true;
        } catch (Exception e){
            //Indien foutmelding: het is geen integer.
            return false;
        }            
    }
    
    public void generateColor(){
        //Maakt 3 kleuiren aan, stopt deze in een ArrayList met kleuren.
        int R = (int)(Math.random()*256);
        int G = (int)(Math.random()*256);
        int B= (int)(Math.random()*256);
        colorList.add(new Color(R, G, B));
    }
    
    public String verwerkReturnObject(ReturnObject ro){
        String result = "";
        System.out.println(ro.getKolommen());
        for(String s :ro.getKolommen()){
            //Result is voor testen.
            result += s + "  | ";
            //Controleert het aantal kolommen.
            columnCounter++;
        }
        result += "\n";
        for(ArrayList a:ro.getRijen()){
            for(Object s : a){
                //Voor tests
                //rowCounter++;
                //Als het object niet leeg is.
                if(s != null){
                    //Als het een int is.
                    if(isInt(s.toString())){
                        int currentAmount = Integer.parseInt(s.toString());
                        amountList.add(currentAmount);
                        totalAmount += currentAmount;
                        //Genereer een kleur voor ieder hoofd-object (dus wat een Integer is).
                        generateColor();
                    } else {
                        //Als het geen int is: legenda item.
                        legendList.add(s.toString());
                    }
                } else {
                    //Als het object leeg is, dan is het een legenda item. Items met integers horen niet leeg te zijn.
                    System.out.println("Nullpointer!");
                    legendList.add("Geen");
                }
            }
        }
        infoVerwerkt = true;
        System.out.println("Verwerkt.");
        return result;
    }
    
    public int pageSize(){
        //Geeft de grootte van de pagina terug voor de scrollbar.
        return textLocation;
    }
    
    public void drawPiechart(Graphics g){
        if(infoVerwerkt == true){
            double currentAmount = 0.0D;
            int startDegrees = 0;
            int arcDegrees = 0;
            //double currentPercentage = 0.0D;

            g.drawString("Kleur", 250 , textLocation);
            g.drawString("Item", 330 , textLocation);
            g.drawString("Aantal", 420 , textLocation);

            textLocation += 20;

            for(int i=0;i<amountList.size();i++){

                //Circeldiagram
                //Zet het aantal graden voor het huidige aantal neer.
                startDegrees = (int) ((currentAmount / totalAmount) * 360);

                //Haalt een kleur uit de lijst met kleuren.
                g.setColor(colorList.get(i));

                //Wat getekent wordt is: 360 graden - het huidige aantal.
                //Dit zorgt ervoor dat telkens een kleiner gedeelte linksom wordt getekend.
                arcDegrees = 360 - startDegrees;

                //Zet het beginpunt bovenaan, en tekent linksom om lege ruimtes te voorkomen.
                g.fillArc(0, 0, 250, 250, 90, arcDegrees);
                currentAmount += amountList.get(i);

                //Legenda
                //Tekent een vakje met de huidige kleur.
                g.fillRect(260, textLocation-9, 10, 10);

                //Zet kleur zwart voor tekst.
                g.setColor(Color.black);
                //Teken het percentage (uitgeschakelt).
                //g.drawString(amountList.get(i) * 100 / totalAmount + "%", 435, textLocation);
                //Teken het huidige aantal.
                g.drawString(amountList.get(i).toString(), 435, textLocation);

                for(int j = 0; j<columnCounter-1; j++){
                    //Legenda Item uitschrijven.
                    g.drawString(legendList.get(drawnColumns), 275, textLocation);
                    textLocation += 20;
                    //Extra enter als er meer dan 1 kolom met legenda items bestaat.
                    drawnColumns++;

                    //Als het programma verschoven wordt, dit hertekenen (voorkomt foutmeldingen).
                    if(drawnColumns == legendList.size()){
                        drawnColumns = 0;
                    }
                }
            }
            g.drawString("Totaal: " + totalAmount, 250, textLocation);
            textLocation = 15;
        }
    }
}
